package com.demo.backtemplate.utils;

import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;

/**
 * 请求工具类
 * <p>
 * 该类用于解析请求头信息、验证用户权限、提取用户身份信息
 *
 * @author dev
 * @version v1.0.0
 * @since v1.0.0
 */
@Slf4j
public class RequestUtils {

    /**
     * 角色请求头名称
     */
    private static final String HEADER_USER_ROLE = "X-User-Role";
    
    /**
     * 管理员角色值
     */
    private static final String ROLE_ADMIN = "admin";
    private static final String ROLE_TEACHER = "teacher";
    private static final String ROLE_STUDENT = "student";

    /**
     * 验证用户是否为管理员角色
     *
     * @param request HTTP请求对象
     * @return 如果用户是管理员返回true，否则返回false
     */
    public static boolean isAdmin(HttpServletRequest request) {
        String userRole = request.getHeader(HEADER_USER_ROLE);
        log.info("当前用户角色: {}", userRole);
        return StringUtils.hasText(userRole) && ROLE_ADMIN.equalsIgnoreCase(userRole);
    }



    /**
     * 验证用户是否有指定权限
     * 
     * @param request HTTP请求对象
     * @param permission 权限标识
     * @return 如果用户有权限返回true，否则返回false
     */
    public static boolean verifyPermission(HttpServletRequest request, String permission) {
        // 管理员拥有所有权限
        if (isAdmin(request)) {
            log.info("管理员权限验证通过: {}", permission);
            return true;
        }
        
        // 这里可以扩展其他角色的权限验证逻辑
        log.warn("用户权限验证失败: {}", permission);
        return false;
    }

    /**
     * 获取用户ID
     * 该方法目前返回null，需要根据实际认证方式扩展
     *
     * @param request HTTP请求对象
     * @return 用户ID，如果未认证返回null
     */
    public static Long getUserId(HttpServletRequest request) {
        // 这里需要根据实际的认证方式来提取用户ID
        // 例如从JWT令牌中提取或从Session中获取
        log.debug("获取用户ID逻辑待实现");
        return null;
    }
} 